/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.openshift.express.client.internal.log;
import org.eclipse.osgi.service.debug.DebugOptions;
import org.eclipse.osgi.service.debug.DebugTrace;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.util.tracker.ServiceTracker;
public class Trace {
public static final String GLOBAL_DEBUG_KEY = "/debug";
public static final String CLIENT_DEBUG_KEY = "/debug/client";
private static final boolean DEFAULT_DEBUG = false;
private String pluginId;
private DebugOptions options;
private ServiceTracker<DebugOptions, DebugOptions> tracker;
private DebugTrace trace;
public Trace(String pluginId) {
this.pluginId = pluginId;
}
public void close() {
if (tracker != null) {
tracker.close();
}
}
private DebugOptions createDebugOptions() {
Bundle bundle = FrameworkUtil.getBundle(getClass());
if (bundle == null) {
return null;
}
BundleContext context = bundle.getBundleContext();
if (context == null)
return null;
this.tracker =
new ServiceTracker<>(context, DebugOptions.class.getName(), null);
tracker.open();
return tracker.getService();
}
public boolean isDebugging() {
Bundle bundle = FrameworkUtil.getBundle(getClass());
if (bundle == null) {
return DEFAULT_DEBUG;
}
DebugOptions debugOptions = getDebugOptions();
if (debugOptions == null) {
return DEFAULT_DEBUG;
}
if(!debugOptions.isDebugEnabled()) {
return false;
}
if (!debugOptions.getBooleanOption(pluginId + GLOBAL_DEBUG_KEY, DEFAULT_DEBUG)) {
return false;
}
return debugOptions.getBooleanOption(pluginId + CLIENT_DEBUG_KEY, DEFAULT_DEBUG);
}
private DebugTrace getDebugTrace() {
if (trace == null) {
this.trace = getDebugOptions().newDebugTrace(pluginId);
}
return trace;
}
public void trace(String option, String message) {
getDebugTrace().trace(GLOBAL_DEBUG_KEY + option, message);
}
private DebugOptions getDebugOptions() {
if (options == null) {
this.options = createDebugOptions();
}
return this.options;
}
}